package main

import (
	"fmt"
	"sync"
	"time"
)

var wg sync.WaitGroup

// 管道方式存在的问题
// 1、使用全局变量在跨包调用时不容易实现规范和统一，需要威海一个共同的channel

func worker(exitChan chan struct{}) {
loop:
	for {
		fmt.Println("worker")
		time.Sleep(time.Second)
		select {
		// 等待接收上级的通知
		case <-exitChan:
			break loop
		default:
		}
	}
	// 如何接收外部命令实现退出
	wg.Done()
}

func main() {
	var exitChan = make(chan struct{})
	wg.Add(1)
	go worker(exitChan)
	time.Sleep(time.Second * 4)
	// 给goroutine 发送退出信号
	exitChan <- struct{}{}
	close(exitChan)
	wg.Wait()
	fmt.Println("over")
}
